'use strict';
var vk; // 全局vk实例
// 涉及的表名
const dbName = {
	//test: "vk-test", // 测试表
};
var _l = require('lodash');
var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function () {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function (options) {
		let { err, res } = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},

	getUserEarnest_money: async function (data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		let userInfo = await vk.baseDao.selects({
			dbName: "uni-id-users", // 主表名
			getOne: true, // 只返回第一条数据
			getMain: true,
			whereJson: {
				_id: uid,
			},
			// 副表列表
			foreignDB: [
				{
					dbName: "vk-pay-orders", // 副表名
					localKey: "_id", // 主表外键字段名
					foreignKey: "user_id", // 副表外键字段名
					as: "earnest_moneys",
					whereJson: {
						status: 1,
						type: 'recharge',
					},
					limit: 1000, // 当limit = 1时，以对象形式返回，否则以数组形式返回
				},
				{
					dbName: "bidding-booths", // 副表名
					localKey: "_id", // 主表外键字段名
					foreignKey: "buy_user", // 副表外键字段名
					as: "buy_booths",
					whereJson: {
						status: 3,
					},
					limit: 1000, // 当limit = 1时，以对象形式返回，否则以数组形式返回
				}
			],
		});
		if (vk.pubfn.isNotNull(userInfo.earnest_moneys)) {
			userInfo.earnest_money = _l.sumBy(userInfo.earnest_moneys, x => x.total_fee)
			userInfo.is_payearnest_money = 1;
		}
		else {
			userInfo.earnest_money = 0;
			userInfo.is_payearnest_money = 0;
		}
		if (userInfo.is_payearnest_money == 0) {
			res.result = 0;
			res.msg = '还没缴纳保证金,请先缴纳'
		}

		if (userInfo.buy_booths.length > 0) {
			let diff_money = userInfo.earnest_money - (userInfo.buy_booths.length * 100 * 1000);
			if (diff_money <= 0) {
				res.result = 0;
				res.msg = '你已购买多个展位,请再补缴押金';
				res.earnest_money = 100*1000;
			} else {
				res.result = 1;

			}

		} else {
			res.result = 1;
		}
		res.userInfo = userInfo;
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	getBoothNowPrice: async function (data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res = await vk.baseDao.selects({
			dbName: "bidding-booths", // 主表名
			getOne: true, // 只返回第一条数据
			whereJson: {
				_id: data._id,
			},
			// 副表列表
			foreignDB: [
				{
					dbName: "bidding-biddingprices", // 副表名
					localKey: "_id", // 主表外键字段名
					foreignKey: "booth_id", // 副表外键字段名
					as: "biddingprices",
					whereJson: {
						status: _.neq(-1),
					},
					// fieldJson:{
					// 	"price"
					// },
					// 主表排序规则
					sortArr: [{ name: "price", type: "desc" }],
					limit: 10, // 当limit = 1时，以对象形式返回，否则以数组形式返回
				},
				{
					dbName: "bidding-session", // 副表名
					localKey: "location", // 主表外键字段名
					foreignKey: "place_id", // 副表外键字段名
					as: "sessions",
					limit: 1000, // 当limit = 1时，以对象形式返回，否则以数组形式返回
				}
			],
		});
		let booth = res.rows;
		let status3 = _l.filter(booth.sessions, x => x.status == 3), maxsession;
		if (vk.pubfn.isNotNull(status3)) {
			try {
				maxsession = _l.maxBy(status3, y => y.end);
			} catch (error) {
				maxsession =null
			}
			
		}


		if (vk.pubfn.isNull(booth.status) || booth.status < 3) {
			if (vk.pubfn.isNotNull(booth.sessions.find(x => x.status == 2))) {
				booth.session = booth.sessions.find(x => x.status == 2)
			} else if (vk.pubfn.isNotNull(booth.sessions.find(x => x.status == 1))) {
				booth.session = booth.sessions.find(x => x.status == 1)
			} else {

				booth.session = maxsession;
			}
			if (vk.pubfn.isNull(booth.endtime) || (vk.pubfn.isNull(booth.inLast) || !booth.inLast) && vk.pubfn.isNotNull(booth.session)) {
				booth.endtime = booth.session.end;
			} else {
				booth.endtime = booth.endtime
			}
		} else {

			booth.session = maxsession;
		}
		let returnobj = {
			endtime: booth.endtime,
			inLast: booth.inLast,
			status: booth.status,
			// sessions: booth.sessions,
			session:booth.session,
			biddingprices: booth.biddingprices
	}
		res.rows = returnobj;
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},

	/**
	 * 获取列表
	 * @url client/booths/kh/check.js.getList 前端调用的url参数地址
	 */
	getList: async function (data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url client/booths/kh/check.js.test 前端调用的url参数地址
	 */
	test: async function (data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
};

module.exports = cloudObject;
